在第 22 天,我們將學習如何將你的 Line Bot 部署到雲端服務,以便讓你的 Bot 可以隨時運行並與全球用戶互動。我們會使用 Heroku 或 AWS 這些流行的雲端平台來部署你的 Flask 應用。
部署前,我們需要確保本地環境的應用準備好,包含所有依賴的安裝包,以及部署配置文件。
建立 requirements.txt
文件:
requirements.txt
文件,並列出所有依賴項,例如:
Flask==2.0.1
line-bot-sdk==1.20.0
gunicorn==20.1.0
建立 Procfile
文件(Heroku 部署需要):
Procfile
告訴 Heroku 如何啟動應用。在項目根目錄中創建一個名為 Procfile
的文件,內容如下:
web: gunicorn app:app
gunicorn
是用於運行 Flask 應用的生產級 WSGI 服務器。app:app
中,第一個 app
是 Python 文件名,第二個 app
是 Flask 實例的名稱。設置環境變數:
LINE_CHANNEL_SECRET
和 LINE_CHANNEL_ACCESS_TOKEN
。這些變數不應該硬編碼在代碼中,而是通過環境變數來管理。Heroku 是一個免費且易於使用的雲端服務平台,適合快速部署應用。
創建 Heroku 帳戶並安裝 Heroku CLI:
初始化 Git 並推送到 Heroku:
git init
git add .
git commit -m "Initial commit"
heroku create # 創建一個 Heroku 應用
git push heroku master # 將代碼推送到 Heroku
設置環境變數:
LINE_CHANNEL_SECRET
和 LINE_CHANNEL_ACCESS_TOKEN
。heroku config:set LINE_CHANNEL_SECRET=你的_LINE_CHANNEL_SECRET
heroku config:set LINE_CHANNEL_ACCESS_TOKEN=你的_LINE_CHANNEL_ACCESS_TOKEN
測試應用:
https://your-app-name.herokuapp.com
。你可以在 LINE Developer Console 中設置這個 URL 作為你的 Webhook Endpoint。/callback
路徑是 Webhook URL 的一部分,如 https://your-app-name.herokuapp.com/callback
。如果需要更靈活和可擴展的解決方案,可以使用 AWS EC2 來部署 Line Bot。AWS 會提供一台虛擬機,你可以完全控制應用的部署過程。
創建 EC2 實例:
連接到 EC2 實例:
ssh -i "your-key.pem" ubuntu@your-ec2-public-ip
安裝 Python 和必要的依賴:
sudo apt update
sudo apt install python3-pip
sudo apt install git
pip3 install virtualenv
clone並配置應用:
git clone https://github.com/your-repository.git
cd your-repository
virtualenv venv
source venv/bin/activate
pip install -r requirements.txt
設置環境變數並運行應用:
export
命令設置環境變數,或者將其寫入 .env
文件並使用 python-dotenv
讀取。gunicorn
來運行應用:gunicorn -b 0.0.0.0:5000 app:app
設置安全組來開放端口:
設置域名和 Webhook:
http://your-ec2-ip/callback
。測試連接:
日誌檢查:
heroku logs --tail
安裝 Nginx:
sudo apt install nginx
配置反向代理:
sudo nano /etc/nginx/sites-available/default
server {
listen 80;
server_name your-ec2-ip;
location / {
proxy_pass http://127.0.0.1:5000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
重啟 Nginx:
sudo systemctl restart nginx
經過今天的學習,你應該能將 Line Bot 部署到雲端,並使其保持 24/7 運行,這樣無論用戶何時與 Bot 互動都能得到回應。